#pragma once

#include <vector>
#include <queue>
#include <stdio.h>
#include <sys/types.h>
#include "User.h"
#include "Game.h"
#include "MsgQueue.h"
#include "Message_type2.h"
#include <fstream>
#include <iostream>
#include <string>
#include <sstream>
#include <stdlib.h>
#define MAX_ROOMS 5

using namespace std;

class Server
{
	vector <User *> Clients;	// przechowuje wszystkich klientow
	vector <Game *> Games;		// przechowuje wszystkie pokoje
	vector <string> Puns;		// przechowuje hasla

public:

	Server();
	~Server();


	//	uruchamiana w osobnym watku, trwa przez caly czas zycia serwera
	//	zdejmuje kolejne zadania z kolejki i w zaleznosci od kodu wywoluje odpowiednie funkcje

	void run();

	User * connectClient(int socket);		//	jako argument przyjmuje socket zasocjowany z nowym klientem, tworzy dla niego obiekt user

	void login(User *a, string login);		// zapamietaj login usera
	void logout(User *a);					// usun uzytkownika
	bool isLoginFree(string login);
	
	void roomList(User *u);

	Game* findGameById(int id);
	User* findUserById(int id_);

	void joinRoom(User *u, int gameId);
	void addRoom(User *u);
	void removeRoom(int gameId);
	void removePlayerFromGame(User *u);

	void startGame(User *u);
	void userGaveUp(User *user);

	void serveChatMessage(User *user, string msg);
	void serveImageMessage(User *user, char *image);

};
